route.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { NextRequest, NextResponse } from "next/server";
  2. import { PrismaClient } from "@prisma/client";
  3. const prisma = new PrismaClient();
  4. export const GET = async (
  5. req: NextRequest,
  6. { params }: { params: { id: string } }
  7. ) => {
  8. try {
  9. const file = await prisma.file.findUnique({
  10. where: { id: params.id },
  11. });
  12. if (!file) {
  13. const response = NextResponse.json(
  14. { error: "File not found" },
  15. { status: 404 }
  16. );
  17. response.headers.set('Access-Control-Allow-Origin', '*');
  18. return response;
  19. }
  20. // Return file as downloadable response
  21. const response = new NextResponse(file.data, {
  22. headers: {
  23. "Content-Type": file.mimetype,
  24. "Content-Disposition": `attachment; filename="${file.filename}"`,
  25. "Content-Length": file.size.toString(),
  26. "Access-Control-Allow-Origin": "*",
  27. },
  28. });
  29. return response;
  30. } catch (error) {
  31. console.error("Error retrieving file:", error);
  32. const response = NextResponse.json(
  33. { error: "Failed to retrieve file" },
  34. { status: 500 }
  35. );
  36. response.headers.set('Access-Control-Allow-Origin', '*');
  37. return response;
  38. } finally {
  39. await prisma.$disconnect();
  40. }
  41. };
  42. export const OPTIONS = async () => {
  43. const response = new NextResponse(null, { status: 200 });
  44. response.headers.set('Access-Control-Allow-Origin', '*');
  45. response.headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
  46. response.headers.set('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  47. return response;
  48. };